package com.test.registry;

import com.test.definition.BeanDefinition;
import com.test.exception.BeansException;

/**
 * Bean定义注册表接口，用于管理Bean的定义信息
 *
 * 该接口主要负责Bean定义的注册、检索和管理功能，是IoC容器的核心组件之一
 */
public interface BeanDefinitionRegistry {

    /**
     * 注册Bean定义
     *
     * @param beanName Bean的名称或标识
     * @param beanDefinition Bean的定义信息
     *
     * 该方法将Bean的定义信息注册到容器中，使得容器能够管理和使用该Bean
     */
    void registerBeanDefinition(String beanName, BeanDefinition beanDefinition);

    /**
     * 获取Bean定义信息
     *
     * @param beanName Bean的名称或标识
     * @return BeanDefinition Bean的定义信息，如果找不到对应的Bean定义，则抛出BeansException异常
     * @throws BeansException 当无法找到指定的Bean定义时抛出此异常
     *
     * 该方法根据Bean的名称或标识，从容器中检索其定义信息
     */
    BeanDefinition getBeanDefinition(String beanName) throws BeansException;

    /**
     * 检查容器中是否包含指定名称或标识的Bean定义
     *
     * @param beanName Bean的名称或标识
     * @return boolean 如果容器中包含指定的Bean定义，则返回true；否则返回false
     *
     * 该方法用于判断某个Bean是否已经注册到容器中
     */
    boolean containsBeanDefinition(String beanName);

    /**
     * 获取容器中所有Bean定义的名称或标识
     *
     * @return String[] 包含所有Bean定义名称或标识的数组
     *
     * 该方法返回容器中所有已注册Bean的名称或标识，便于遍历和管理
     */
    String[] getBeanDefinitionNames();
}
